aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/app/api/v1/bookmarks/[bookmarkId]
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-05-18 16:58:08 +0100
committerGitHub <noreply@github.com>2025-05-18 16:58:08 +0100
commit3505cb7d6416d101a4fcb1be27fc22e0171bacd2 (patch)
treeef9f55504b8a5b20add8c0ebe916972ab4ab0178 /apps/web/app/api/v1/bookmarks/[bookmarkId]
parent74e74fa6425f072107de3a9bc9dd8f91c5ac9a7d (diff)
downloadkarakeep-3505cb7d6416d101a4fcb1be27fc22e0171bacd2.tar.zst
refactor: Migrate from NextJs's API routes to Hono based routes for the API (#1432)
* Setup Hono and migrate the highlights API there * Implement the tags and lists endpoint * Implement the bookmarks and users endpoints * Add the trpc error code adapter * Remove the old nextjs handlers * fix api key not found handling * Fix trpc error handling * Fix 204 handling * Fix search ordering * Implement the singlefile endpoint * Implement the asset serving endpoints * Implement webauth * Add hono as a catch all route under api * fix tests
Diffstat (limited to 'apps/web/app/api/v1/bookmarks/[bookmarkId]')
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts37
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts36
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/highlights/route.ts18
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts18
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts54
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/summarize/route.ts19
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts45
7 files changed, 0 insertions, 227 deletions
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts
deleted file mode 100644
index 88e203de..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-import { z } from "zod";
-
-export const dynamic = "force-dynamic";
-
-export const PUT = (
- req: NextRequest,
- params: { params: { bookmarkId: string; assetId: string } },
-) =>
- buildHandler({
- req,
- bodySchema: z.object({ assetId: z.string() }),
- handler: async ({ api, body }) => {
- await api.assets.replaceAsset({
- bookmarkId: params.params.bookmarkId,
- oldAssetId: params.params.assetId,
- newAssetId: body!.assetId,
- });
- return { status: 204 };
- },
- });
-
-export const DELETE = (
- req: NextRequest,
- params: { params: { bookmarkId: string; assetId: string } },
-) =>
- buildHandler({
- req,
- handler: async ({ api }) => {
- await api.assets.detachAsset({
- bookmarkId: params.params.bookmarkId,
- assetId: params.params.assetId,
- });
- return { status: 204 };
- },
- });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts
deleted file mode 100644
index 6c7c70d7..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-
-import { zAssetSchema } from "@karakeep/shared/types/bookmarks";
-
-export const dynamic = "force-dynamic";
-
-export const GET = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- handler: async ({ api }) => {
- const resp = await api.bookmarks.getBookmark({
- bookmarkId: params.params.bookmarkId,
- });
- return { status: 200, resp: { assets: resp.assets } };
- },
- });
-
-export const POST = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- bodySchema: zAssetSchema,
- handler: async ({ api, body }) => {
- const asset = await api.assets.attachAsset({
- bookmarkId: params.params.bookmarkId,
- asset: body!,
- });
- return { status: 201, resp: asset };
- },
- });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/highlights/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/highlights/route.ts
deleted file mode 100644
index 4e1f87a0..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/highlights/route.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-
-export const dynamic = "force-dynamic";
-
-export const GET = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- handler: async ({ api }) => {
- const resp = await api.highlights.getForBookmark({
- bookmarkId: params.params.bookmarkId,
- });
- return { status: 200, resp };
- },
- });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts
deleted file mode 100644
index ad3052c9..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-
-export const dynamic = "force-dynamic";
-
-export const GET = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- handler: async ({ api }) => {
- const resp = await api.lists.getListsOfBookmark({
- bookmarkId: params.params.bookmarkId,
- });
- return { status: 200, resp };
- },
- });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts
deleted file mode 100644
index 9ad18fd3..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-
-import { zUpdateBookmarksRequestSchema } from "@karakeep/shared/types/bookmarks";
-
-import { zGetBookmarkQueryParamsSchema } from "../../utils/types";
-
-export const dynamic = "force-dynamic";
-
-export const GET = (
- req: NextRequest,
- { params }: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- searchParamsSchema: zGetBookmarkQueryParamsSchema,
- handler: async ({ api, searchParams }) => {
- const bookmark = await api.bookmarks.getBookmark({
- bookmarkId: params.bookmarkId,
- includeContent: searchParams.includeContent,
- });
- return { status: 200, resp: bookmark };
- },
- });
-
-export const PATCH = (
- req: NextRequest,
- { params }: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- bodySchema: zUpdateBookmarksRequestSchema.omit({ bookmarkId: true }),
- handler: async ({ api, body }) => {
- const bookmark = await api.bookmarks.updateBookmark({
- bookmarkId: params.bookmarkId,
- ...body!,
- });
- return { status: 200, resp: bookmark };
- },
- });
-
-export const DELETE = (
- req: NextRequest,
- { params }: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- handler: async ({ api }) => {
- await api.bookmarks.deleteBookmark({
- bookmarkId: params.bookmarkId,
- });
- return { status: 204 };
- },
- });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/summarize/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/summarize/route.ts
deleted file mode 100644
index ea41cad4..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/summarize/route.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-
-export const dynamic = "force-dynamic";
-
-export const POST = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- handler: async ({ api }) => {
- const bookmark = await api.bookmarks.summarizeBookmark({
- bookmarkId: params.params.bookmarkId,
- });
-
- return { status: 200, resp: bookmark };
- },
- });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts
deleted file mode 100644
index 00c28afa..00000000
--- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { NextRequest } from "next/server";
-import { buildHandler } from "@/app/api/v1/utils/handler";
-import { z } from "zod";
-
-import { zManipulatedTagSchema } from "@karakeep/shared/types/bookmarks";
-
-export const dynamic = "force-dynamic";
-
-export const POST = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- bodySchema: z.object({
- tags: z.array(zManipulatedTagSchema),
- }),
- handler: async ({ api, body }) => {
- const resp = await api.bookmarks.updateTags({
- bookmarkId: params.params.bookmarkId,
- attach: body!.tags,
- detach: [],
- });
- return { status: 200, resp: { attached: resp.attached } };
- },
- });
-
-export const DELETE = (
- req: NextRequest,
- params: { params: { bookmarkId: string } },
-) =>
- buildHandler({
- req,
- bodySchema: z.object({
- tags: z.array(zManipulatedTagSchema),
- }),
- handler: async ({ api, body }) => {
- const resp = await api.bookmarks.updateTags({
- bookmarkId: params.params.bookmarkId,
- detach: body!.tags,
- attach: [],
- });
- return { status: 200, resp: { detached: resp.detached } };
- },
- });